<html>
    <head>
        <title>工作单元相关公约</title>
    </head>
    <body>
        <script>
               /*
                        一、工作单元相关公约

                                1、ABP 为哪些方法类型自动启动UOW

                                                以下方法类型被视为一个工作单元：
                                                
                                                                ①、asp.net core 的控制器 Action方法

                                                                ②、ASP.NETCore Razor页面处理程序。

                                                                ③、Application service methods 应用服务方法。

                                                                ④、Repository methods. 存储库方法
                                                    
                                                对于这些方法，UOW会自动开始，除非已经有工作单元的作用域在起作用。

                                                例子：

                                                    ①、如果你调用一个存储库方法并且还没有启动UOW，它会自动开始一个新的事务性UOW，它涉及存储库方法中完成的所有操作，如果存储库方法没有抛出任何异常，会提交事务。
                                                
                                                        存储库方法根本不知道UOW或事务。它只适用于常规数据库对象（例如，EF Core的DbContext），UOW由ABP处理。


                                                    ②、如果你调用应用程序服务方法，则相同的UOW系统如上所述工作。

                                                        如果应用程序服务方法使用某些存储库，则存储库不会开始新的UOW，但参与由ABP为应用程序服务方法启动的当前工作单元。

                                                    
                                                    ③、ASP.NETCore控制器动作也是如此。如果操作以控制器动作开始，则UOW范围是控制器动作的方法体。

                                                所有这些都由ABP自动处理。




                                2、数据库事务行为  Database Transaction Behavior

                                                 虽然上面的部分解释了UOW，因为它是数据库事务，但实际上UOW不一定是事务性的。默认情况下：

                                                    ①、HTTP GET请求不会启动事务性UOW。它们仍然启动UOW，但不会创建数据库事务。

                                                    ②、如果底层"数据库提供程序"支持数据库级事务,则所有其他HTTP请求类型都使用数据库事务启动UOW。


                                                这是因为HTTP GET 请求不会(也不应该)在数据库中进行任何更改。你可以使用下面的解释的选项更改此行为。

                    */
        </script>
    </body>
</html>